//
// Created by DELL on 2025/2/13.
//

#include "Result.h"

#include <any>
#include <utility>

namespace zdotp {
    Result::Result(std::shared_ptr<TaskBase> task, const bool is_valid)
    : task_(task), is_valid_(is_valid) {
        task_->set_result(this);
    }

    void Result::set_value(Any any) {
        any_ = std::move(any);
        sem_.post();
    }

    Any Result::get() {
        if (!is_valid_) {
            return {};
        }
        sem_.wait();
        return std::move(any_);
    }
} // zdotp